package br.edu.JUniversity.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import br.edu.JUniversity.ConnectionFactory;
import br.edu.JUniversity.model.Documento;
import br.edu.JUniversity.model.Documento.tipoDocumento;
import br.edu.JUniversity.model.TipoDocumento;

public class DocumentoDAO {
	private final Connection connection;

	public DocumentoDAO() {
		try {
			connection = new ConnectionFactory().getConnection();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

	public List<Documento> lista() {
		try {
			List<Documento> documento = new ArrayList<Documento>();
			PreparedStatement stmt = this.connection
					.prepareStatement("select * from documento where data_exclusao IS NULL ");
			ResultSet rs = stmt.executeQuery();

			while (rs.next()) {
				documento.add(populaDocumento(rs));
			}

			rs.close();
			stmt.close();

			return documento;
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	
	public List<TipoDocumento> tipoDocumento() {
		
		List<TipoDocumento> tipoDocumento = new ArrayList<TipoDocumento>();
		for (Documento.tipoDocumento nomeTipoDocumento : Documento.tipoDocumento.values()) {
			tipoDocumento.add(populaTipoDocumento(nomeTipoDocumento));
		}
		return tipoDocumento();
	}

	
	private TipoDocumento populaTipoDocumento(tipoDocumento nomeTipoDocumento) {
		TipoDocumento tipoDocumento = new TipoDocumento();
		tipoDocumento.setNomeDocumento(nomeTipoDocumento.toString());
		
		return tipoDocumento;
	}
	
	private Documento populaDocumento(ResultSet rs) throws SQLException {
		Documento documento = new Documento();
		documento.setAluno(rs.getString("aluno"));
		documento.setNome(rs.getString("nome"));
		documento.setIdDocumento(rs.getInt("idDocumento"));
		documento.setIsbn(rs.getString("isbn"));
		documento.setNota(rs.getString("nota"));
		documento.setProfessor(rs.getString("professor"));
		documento.setObservacoes(rs.getString("observacoes"));
		documento.setPath(rs.getString("path"));
		documento.setAssunto(rs.getString("assunto"));
		documento.setDisciplina(rs.getString("disciplina"));
		documento.setGrupoEstudo(rs.getString("grupoEstudo"));
		return documento;
	}

	public void remove(Documento documento) {
		String sql = "update documento set data_exclusao = ? where idDocumento = ?";
		PreparedStatement stmt;
		try {
			stmt = connection.prepareStatement(sql);
			
			Date data = new Date();  
			SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy"); 
			stmt.setString(1,formatador.format( data ));
			stmt.setInt(2, documento.getIdDocumento());
			stmt.execute();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

	public void adiciona(Documento documento) {
		String sql = "insert into documento (aluno,assunto,disciplina,grupoEstudo,isbn,nome,nota,observacoes,path,professor,data_inclusao,tipoDocumento) values (?,?,?,?,?,?,?,?,?,?,?,?)";
		PreparedStatement stmt;
		try {
			stmt = connection.prepareStatement(sql);
			
			stmt.setString(1,documento.getAluno());
			stmt.setString(2,documento.getAssunto());
			stmt.setString(3,documento.getDisciplina());
			stmt.setString(4,documento.getGrupoEstudo());
			stmt.setString(5,documento.getIsbn());
			stmt.setString(6,documento.getNome());
			stmt.setString(7,documento.getNota());
			stmt.setString(8,documento.getObservacoes());
			stmt.setString(9,documento.getPath());
			stmt.setString(10,documento.getProfessor());
			Date data = new Date();  
			SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy"); 
			stmt.setString(11,formatador.format( data ));
			stmt.setString(12,documento.getTipoDocumento());
			
			
			stmt.execute();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

	public void altera(Documento documento) {
		String sql = "update documento set aluno = ?,assunto = ?,disciplina = ?,grupoEstudo = ?,isbn = ?,nome = ?,nota = ?,observacoes = ?,path = ?,professor = ?,data_alteracao=?,tipoDocumento =? where idDocumento = ?";
		PreparedStatement stmt;
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setString(1,documento.getAluno());
			stmt.setString(2,documento.getAssunto());
			stmt.setString(3,documento.getDisciplina());
			stmt.setString(4,documento.getGrupoEstudo());
			stmt.setString(5,documento.getIsbn());
			stmt.setString(6,documento.getNome());
			stmt.setString(7,documento.getNota());
			stmt.setString(8,documento.getObservacoes());
			stmt.setString(9,documento.getPath());
			stmt.setString(10,documento.getProfessor());
			Date data = new Date();  
			SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy"); 
			stmt.setString(11,formatador.format( data ));
			stmt.setString(12,documento.getTipoDocumento());
			stmt.setInt(13,documento.getIdDocumento());
			
			stmt.execute();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

	public Documento buscaPorId(Long id) {
		try {
			PreparedStatement stmt = this.connection
					.prepareStatement("select * from documento where idDocumento = ?");
			stmt.setLong(1, id);

			ResultSet rs = stmt.executeQuery();

			if (rs.next()) {
				return populaDocumento(rs);
			}

			rs.close();
			stmt.close();

			return null;
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	
	

}
